{
    "kind": "Template",
    "apiVersion": "v1",
    "metadata": {
        "annotations": {
            "description": "Application template for EAP 6 A-MQ applications with persistent storage built using STI.",
            "iconClass" : "icon-jboss"
        },
        "name": "eap6-amq-persistent-sti"
    },
    "labels": {
        "template": "eap6-amq-persistent-sti"
    },
    "parameters": [
        {
            "description": "EAP Release version, e.g. 6.4, etc.",
            "name": "EAP_RELEASE",
            "value": "6.4"
        },
        {
            "description": "ActiveMQ Release version, e.g. 6.2, etc.",
            "name": "AMQ_RELEASE",
            "value": "6.2"
        },
        {
            "description": "The name for the application.",
            "name": "APPLICATION_NAME",
            "value": "eap-app"
        },
        {
            "description": "Custom hostname for service routes.  Leave blank for default hostname, e.g.: <application-name>.<project>.<default-domain-suffix>",
            "name": "APPLICATION_HOSTNAME",
            "value": ""
        },
        {
            "description": "Git source URI for application",
            "name": "GIT_URI"
        },
        {
            "description": "Git branch/tag reference",
            "name": "GIT_REF",
            "value": "master"
        },
        {
            "description": "Path within Git project to build; empty for root project directory.",
            "name": "GIT_CONTEXT_DIR",
            "value": ""
        },
        {
            "description": "Size of persistent storage for database volume.",
            "name": "VOLUME_CAPACITY",
            "value": "512Mi"
        },
        {
            "description": "JNDI name for connection factory used by applications to connect to the broker, e.g. java:/ConnectionFactory",
            "name": "MQ_JNDI",
            "value": "java:/ConnectionFactory"
        },
        {
            "description": "Protocol to configure.  Only openwire is supported by EAP.  amqp, amqp+ssl, mqtt, stomp, stomp+ssl, and ssl are not supported by EAP",
            "name": "MQ_PROTOCOL",
            "value": "openwire"
        },
        {
            "description": "Queue names",
            "name": "MQ_QUEUES",
            "value": ""
        },
        {
            "description": "Topic names",
            "name": "MQ_TOPICS",
            "value": ""
        },
        {
            "description": "The name of the secret containing the keystore file",
            "name": "EAP_HTTPS_SECRET",
            "value": "eap-app-secret"
        },
        {
            "description": "The name of the keystore file within the secret",
            "name": "EAP_HTTPS_KEYSTORE",
            "value": "keystore.jks"
        },
        {
            "description": "The name associated with the server certificate",
            "name": "EAP_HTTPS_NAME",
            "value": ""
        },
        {
            "description": "The password for the keystore and certificate",
            "name": "EAP_HTTPS_PASSWORD",
            "value": ""
        },
        {
            "description": "Broker user name",
            "name": "MQ_USERNAME",
            "from": "user[a-zA-Z0-9]{3}",
            "generate": "expression"
        },
        {
            "description": "Broker user password",
            "name": "MQ_PASSWORD",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression"
        },
        {
            "description": "ActiveMQ Admin User",
            "name": "AMQ_ADMIN_USERNAME",
            "from": "user[a-zA-Z0-9]{3}",
            "generate": "expression"
        },
        {
            "description": "ActiveMQ Admin Password",
            "name": "AMQ_ADMIN_PASSWORD",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression"
        },
        {
            "description": "Github trigger secret",
            "name": "GITHUB_TRIGGER_SECRET",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression"
        },
        {
            "description": "Generic build trigger secret",
            "name": "GENERIC_TRIGGER_SECRET",
            "from": "[a-zA-Z0-9]{8}",
            "generate": "expression"
        }
    ],
    "objects": [
        {
            "kind": "Service",
            "apiVersion": "v1",
            "spec": {
                "ports": [
                    {
                        "port": 8080,
                        "targetPort": 8080
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                }
            },
            "metadata": {
                "name": "${APPLICATION_NAME}",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "annotations": {
                    "description": "The web server's http port."
                }
            }
        },
        {
            "kind": "Service",
            "apiVersion": "v1",
            "spec": {
                "ports": [
                    {
                        "port": 8443,
                        "targetPort": 8443
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                }
            },
            "metadata": {
                "name": "secure-${APPLICATION_NAME}",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "annotations": {
                    "description": "The web server's https port."
                }
            }
        },
        {
            "kind": "Service",
            "apiVersion": "v1",
            "spec": {
                "ports": [
                    {
                        "port": 8888,
                        "targetPort": 8888
                    }
                ],
                "portalIP": "None",
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                }
            },
            "metadata": {
                "name": "${APPLICATION_NAME}-ping",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "annotations": {
                    "description": "Ping service for clustered applications."
                }
            }
        },
        {
            "kind": "Service",
            "apiVersion": "v1",
            "spec": {
                "ports": [
                    {
                        "port": 61616,
                        "targetPort": 61616
                    }
                ],
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}-amq"
                }
            },
            "metadata": {
                "name": "${APPLICATION_NAME}-amq-tcp",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "annotations": {
                    "description": "The broker's tcp (openwire) port."
                }
            }
        },
        {
            "kind": "Route",
            "apiVersion": "v1",
            "id": "${APPLICATION_NAME}-http-route",
            "metadata": {
              "name": "${APPLICATION_NAME}-http-route",
              "labels": {
                  "application": "${APPLICATION_NAME}"
              },
              "annotations": {
                  "description": "Route for application's http service."
              }
            },
            "spec": {
                "host": "${APPLICATION_HOSTNAME}",
                "to": {
                    "name": "${APPLICATION_NAME}"
                }
            }
        },
        {
            "kind": "Route",
            "apiVersion": "v1",
            "id": "${APPLICATION_NAME}-https-route",
            "metadata": {
                "name": "${APPLICATION_NAME}-https-route",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                },
                "annotations": {
                    "description": "Route for application's https service."
                }
            },
            "spec": {
                "host": "${APPLICATION_HOSTNAME}",
                "to": {
                    "name": "secure-${APPLICATION_NAME}"
                },
                "tls": {
                    "termination" : "passthrough"
                }
            }
        },
        {
            "kind": "ImageStream",
            "apiVersion": "v1",
            "metadata": {
                "name": "${APPLICATION_NAME}",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                }
            }
        },
        {
            "kind": "BuildConfig",
            "apiVersion": "v1",
            "metadata": {
                "name": "${APPLICATION_NAME}",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                }
            },
            "spec": {
                "source": {
                    "type": "Git",
                    "git": {
                        "uri": "${GIT_URI}",
                        "ref": "${GIT_REF}"
                    },
                    "contextDir":"${GIT_CONTEXT_DIR}"
                },
                "strategy": {
                    "type": "Source",
                    "sourceStrategy": {
                        "from": {
                            "kind": "ImageStreamTag",
                            "namespace": "openshift",
                            "name": "jboss-eap6-openshift:${EAP_RELEASE}"
                        }
                    }
                },
                "output": {
                    "to": {
                        "kind": "ImageStreamTag",
                        "name": "${APPLICATION_NAME}:latest"
                    }
                },
                "triggers": [
                    {
                        "type": "GitHub",
                        "github": {
                            "secret": "${GITHUB_TRIGGER_SECRET}"
                        }
                    },
                    {
                        "type": "Generic",
                        "generic": {
                            "secret": "${GENERIC_TRIGGER_SECRET}"
                        }
                    },
                    {
                        "type": "ImageChange",
                        "imageChange": {}
                    }
                ]
            }
        },
        {
            "kind": "DeploymentConfig",
            "apiVersion": "v1",
            "metadata": {
                "name": "${APPLICATION_NAME}",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                }
            },
            "spec": {
                "strategy": {
                    "type": "Recreate"
                },
                "triggers": [
                    {
                        "type": "ImageChange",
                        "imageChangeParams": {
                            "automatic": true,
                            "containerNames": [
                                "${APPLICATION_NAME}"
                            ],
                            "from": {
                                "kind": "ImageStream",
                                "name": "${APPLICATION_NAME}"
                            }
                        }
                    }
                ],
                "replicas": 1,
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}"
                },
                "template": {
                    "metadata": {
                        "name": "${APPLICATION_NAME}",
                        "labels": {
                            "deploymentConfig": "${APPLICATION_NAME}",
                            "application": "${APPLICATION_NAME}"
                        }
                    },
                    "spec": {
                        "serviceAccount": "eap-service-account",
                        "containers": [
                            {
                                "name": "${APPLICATION_NAME}",
                                "image": "${APPLICATION_NAME}",
                                "imagePullPolicy": "Always",
                                "volumeMounts": [
                                    {
                                        "name": "eap-keystore-volume",
                                        "mountPath": "/etc/eap-secret-volume",
                                        "readOnly": true
                                    }
                                ],
                                "readinessProbe": {
                                    "exec": {
                                        "command": [
                                            "/bin/bash",
                                            "-c",
                                            "/opt/eap/bin/readinessProbe.sh"
                                        ]
                                    }
                                },
                                "ports": [
                                    {
                                        "name": "http",
                                        "containerPort": 8080,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "https",
                                        "containerPort": 8443,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "ping",
                                        "containerPort": 8888,
                                        "protocol": "TCP"
                                    }
                                ],
                                "env": [
                                    {
                                        "name": "MQ_SERVICE_PREFIX_MAPPING",
                                        "value": "${APPLICATION_NAME}-amq=MQ"
                                    },
                                    {
                                        "name": "MQ_JNDI",
                                        "value": "${MQ_JNDI}"
                                    },
                                    {
                                        "name": "MQ_USERNAME",
                                        "value": "${MQ_USERNAME}"
                                    },
                                    {
                                        "name": "MQ_PASSWORD",
                                        "value": "${MQ_PASSWORD}"
                                    },
                                    {
                                        "name": "MQ_PROTOCOL",
                                        "value": "tcp"
                                    },
                                    {
                                        "name": "MQ_QUEUES",
                                        "value": "${MQ_QUEUES}"
                                    },
                                    {
                                        "name": "MQ_TOPICS",
                                        "value": "${MQ_TOPICS}"
                                    },
                                    {
                                        "name": "OPENSHIFT_DNS_PING_SERVICE_NAME",
                                        "value": "${APPLICATION_NAME}-ping"
                                    },
                                    {
                                        "name": "OPENSHIFT_DNS_PING_SERVICE_PORT",
                                        "value": "8888"
                                    },
                                    {
                                        "name": "EAP_HTTPS_KEYSTORE_DIR",
                                        "value": "/etc/eap-secret-volume"
                                    },
                                    {
                                        "name": "EAP_HTTPS_KEYSTORE",
                                        "value": "${EAP_HTTPS_KEYSTORE}"
                                    },
                                    {
                                        "name": "EAP_HTTPS_NAME",
                                        "value": "${EAP_HTTPS_NAME}"
                                    },
                                    {
                                        "name": "EAP_HTTPS_PASSWORD",
                                        "value": "${EAP_HTTPS_PASSWORD}"
                                    }
                                ]
                            }
                        ],
                        "volumes": [
                            {
                                "name": "eap-keystore-volume",
                                "secret": {
                                    "secretName": "${EAP_HTTPS_SECRET}"
                                }
                            }
                        ]
                    }
                }
            }
        },
        {
            "kind": "DeploymentConfig",
            "apiVersion": "v1",
            "metadata": {
                "name": "${APPLICATION_NAME}-amq",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                }
            },
            "spec": {
                "strategy": {
                    "type": "Recreate"
                },
                "triggers": [
                    {
                        "type": "ImageChange",
                        "imageChangeParams": {
                            "automatic": true,
                            "containerNames": [
                                "${APPLICATION_NAME}-amq"
                            ],
                            "from": {
                                "kind": "ImageStreamTag",
                                "namespace": "openshift",
                                "name": "jboss-amq-6:${AMQ_RELEASE}"
                            }
                        }
                    }
                ],
                "replicas": 1,
                "selector": {
                    "deploymentConfig": "${APPLICATION_NAME}-amq"
                },
                "template": {
                    "metadata": {
                        "name": "${APPLICATION_NAME}-amq",
                        "labels": {
                            "deploymentConfig": "${APPLICATION_NAME}-amq",
                            "application": "${APPLICATION_NAME}"
                        }
                    },
                    "spec": {
                        "containers": [
                            {
                                "name": "${APPLICATION_NAME}-amq",
                                "image": "jboss-amq-6",
                                "imagePullPolicy": "Always",
                                "readinessProbe": {
                                    "exec": {
                                        "command": [
                                            "/bin/bash",
                                            "-c",
                                            "curl -s -L -u ${AMQ_ADMIN_USERNAME}:${AMQ_ADMIN_PASSWORD} 'http://localhost:8161/hawtio/jolokia/read/org.apache.activemq:type=Broker,brokerName=*,service=Health/CurrentStatus' | grep -q '\"CurrentStatus\" *: *\"Good\"'"
                                        ]
                                    }
                                },
                                "ports": [
                                    {
                                        "name": "amqp",
                                        "containerPort": 5672,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "amqp-ssl",
                                        "containerPort": 5671,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "mqtt",
                                        "containerPort": 1883,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "stomp",
                                        "containerPort": 61613,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "stomp-ssl",
                                        "containerPort": 61612,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "tcp",
                                        "containerPort": 61616,
                                        "protocol": "TCP"
                                    },
                                    {
                                        "name": "tcp-ssl",
                                        "containerPort": 61617,
                                        "protocol": "TCP"
                                    }
                                ],
                                "volumeMounts": [
                                    {
                                        "mountPath": "/opt/amq/data/kahadb",
                                        "name": "${APPLICATION_NAME}-amq-pvol"
                                    }
                                ],
                                "env": [
                                    {
                                        "name": "AMQ_USER",
                                        "value": "${MQ_USERNAME}"
                                    },
                                    {
                                        "name": "AMQ_PASSWORD",
                                        "value": "${MQ_PASSWORD}"
                                    },
                                    {
                                        "name": "AMQ_PROTOCOLS",
                                        "value": "${MQ_PROTOCOL}"
                                    },
                                    {
                                        "name": "AMQ_QUEUES",
                                        "value": "${MQ_QUEUES}"
                                    },
                                    {
                                        "name": "AMQ_TOPICS",
                                        "value": "${MQ_TOPICS}"
                                    },
                                    {
                                        "name": "AMQ_ADMIN_USERNAME",
                                        "value": "${AMQ_ADMIN_USERNAME}"
                                    },
                                    {
                                        "name": "AMQ_ADMIN_PASSWORD",
                                        "value": "${AMQ_ADMIN_PASSWORD}"
                                    }
                                ]
                            }
                        ],
                        "volumes": [
                            {
                                "name": "${APPLICATION_NAME}-amq-pvol",
                                "persistentVolumeClaim": {
                                    "claimName": "${APPLICATION_NAME}-amq-claim"
                                }
                            }
                        ]
                    }
                }
            }
        },
        {
            "apiVersion": "v1",
            "kind": "PersistentVolumeClaim",
            "metadata": {
                "name": "${APPLICATION_NAME}-amq-claim",
                "labels": {
                    "application": "${APPLICATION_NAME}"
                }
            },
            "spec": {
                "accessModes": [ "ReadWriteOnce" ],
                "resources": {
                    "requests": {
                        "storage": "${VOLUME_CAPACITY}"
                    }
                }
            }
        }
    ]
}
